home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib05.dsk
/
APPLE TRICKS - PROTECT.int
< prev
next >
Wrap
Text File
|
2023-02-26
|
5KB
|
164 lines
1 REM ******************************
2 REM * APPLE TRICKS - PROTECT *
3 REM * BY CRAIG CROSSMAN *
4 REM * COPYRIGHT (C) 1981 *
5 REM * BY MICRO-SPARC INC *
6 REM * (INTEGER BASIC) *
7 REM ******************************
10 GOTO 100
32 REM
40 CONT=0
42 TRACK= PEEK (RIB):SECT= PEEK (RIB+1)
44 CMD=1
46 GOSUB 550:REM READ T/S LIST
48 FOR P=12 TO 255 STEP 2
50 TRACK= PEEK (BUF+P):SECT= PEEK (BUF+P+1)
52 IF TRACK+SECT=0 THEN RETURN
54 POKE IOB+8,0: POKE IOB+9,ADDR
56 CMD=1:GOSUB 700
58 ADDR=ADDR+1
60 CONT=CONT+1
62 IF CONT<MS THEN 66
64 CONT=-CONT:RETURN
66 NEXT P
68 TRACK= PEEK (BUF+1):SECT= PEEK (BUF+2)
70 IF TRACK+SECT#0 THEN 44
74 RETURN
100 REM SINGLE DRIVE FILE TRANSFER
150 REM PROGRAM.
200 REM
250 TEXT :CALL -936
310 X=0
350 DIM F$(30)
400 DIM FS(10),FL(10),FT(10)
450 D$="<CTRL-D>":REM CTL D
460 GOSUB 7700
500 GOTO 1250
550 REM
650 POKE IOB+8,BUFL: POKE IOB+9,BUFH
700 POKE IOB+4,TRACK
750 POKE IOB+5,SECT
800 POKE IOB+12,CMD
850 POKE IOB+3,0
900 CALL 659
950 STS= PEEK (IOB+13)
1000 IF STS=0 THEN RETURN
1050 PRINT "I/O ERROR STATUS=";STS:PRINT "TRACK=";TRACK;" SECTOR=";SECT:END
1250 LOM= PEEK (74)+ PEEK (75)*256
1260 FADD=LOM+11:XADD=LOM+4
1300 NAMES=LOM+512
1350 CALL 640
1400 X= PEEK (3):X1= PEEK (2):GOSUB 7100
1450 IOB=X
1500 X= PEEK (1):X1= PEEK (0):BUFL=X1:BUFH=X:GOSUB 7100
1550 BUF=X
1600 FREE=(NAMES+330)/256+1:REM PAGE #
1650 FREEN= PEEK (203)
1700 PRINT "SINGLE DRIVE FILE TRANSFER PROGRAM"
1705 PRINT "WHICH DOS ARE YOU USING? TYPE A 2 FOR":INPUT "3.2 OR A 3 FOR 3.3",DT
1707 IF DT=2 THEN DT=12:IF DT=3 THEN DT=15:IF DT#12 AND DT#15 THEN 1705
1710 PRINT "WHERE IS THE TRACK IN DECIMAL WHERE THE":INPUT "CATALOG IS ON YOUR PROTECTED DISK?",QQQ
1750 ZZ=0:TRACK=17: POKE -21503,17:PRINT "INSERT MASTER DISKETTE":GOSUB 6650
1755 PRINT D$;"CATALOG"
1800 FREEH=FREE
1850 FOR NUMF=0 TO 10
1852 PRINT :PRINT : POKE 34,22
1855 IF CONT=0 THEN VTAB 23
1900 IF CONT=0 THEN INPUT "FILE NAME",F$
1950 CONT=0
2000 IF LEN(F$)#0 THEN 2100
2050 CONT=-1:NUMF=NUMF-1:GOTO 3410
2100 GOSUB 6050
2150 IF RIB#0 THEN 2300
2200 PRINT "FILE NOT FOUND":FOR QQ=1 TO 1000:NEXT QQ:CALL -936:PRINT "<CTRL-D>CATALOG":GOTO 1855
2300 FT(NUMF)= PEEK (RIB+2)
2500 GOSUB 5000
2550 FL(NUMF)=FREEH
2600 ADDR=FREEH:MS=FREEN-FREEH:IF MS<=0 THEN 2750
2650 GOSUB 32
2700 IF CONT>=0 THEN 2800
2750 NUMF=NUMF-1:CONT=1:GOTO 3410
2800 FS(NUMF)=CONT:CONT=0
2850 FREEH=FREEH+FS(NUMF)
2855 VTAB 22
2900 PRINT "LEN:";FS(NUMF);F$
3200 NEXT NUMF
3250 NUMF=10
3410 TEXT :CALL -936
3450 PRINT "INSERT COPY DISKETTE":GOSUB 6650:ZZ=1: POKE IOB+4,QQQ: POKE -21503,QQQ
3460 PRINT D$;"CATALOG"
3500 FOR N=0 TO NUMF
3550 GOSUB 5600
3605 GOSUB 6050
3610 IF RIB=0 THEN 3640
3620 PRINT "DELETE FILE:";F$
3630 INPUT "(Y/N)",Y$:IF Y$#"Y" THEN 4400
3635 PRINT D$;"DELETE";F$
3640 PRINT "WRITING ";F$
3650 X1=4:X=FL(N):GOSUB 7100
3700 STRT=X:REM START OF FILE DATA
3750 L=FS(N)*256-4:REM LENGTH -HEADER
3800 IF PEEK (STRT+L-2)=0 THEN L=L-1
3850 PRINT D$;"BSAVE ";F$;",A";STRT;",L";L
3900 REM
3950 REM
4000 REM
4050 GOSUB 6050
4100 POKE RIB+2,FT(N)
4150 CMD=2:GOSUB 550
4200 TRACK= PEEK (RIB):SECT= PEEK (RIB+1):CMD=1:GOSUB 550:REM T/S LIST
4250 TRACK= PEEK (BUF+12):SECT= PEEK (BUF+13):CMD=2
4300 POKE IOB+8,0: POKE IOB+9,FL(N)
4350 GOSUB 700
4400 NEXT N
4450 IF CONT=0 THEN 1750
4500 IF CONT<0 THEN 4560
4550 N=NUMF+1:GOSUB 5600:GOTO 1750
4560 PRINT D$;"CATALOG"
4600 END
4650 REM
5000 FP=NAMES+NUMF*30
5050 FOR I=1 TO LEN(F$)
5100 POKE FP+I-1, ASC(F$(I)):NEXT I
5150 FOR I= LEN(F$) TO 29
5200 POKE FP+I,160
5250 NEXT I
5300 RETURN
5600 FP=NAMES+N*30
5650 FOR I=0 TO 29
5700 POKE FADD+I, PEEK (FP+I):NEXT I
5750 POKE FADD+29, PEEK (FADD+29) MOD 128
5800 RETURN
6050 REM
6100 TRACK=17:SECT=DT:CMD=1:IF ZZ=1 THEN TRACK=QQQ
6150 GOSUB 550:IF STS=0 THEN 6250
6200 PRINT "READ ERROR STATUS=";STS:END
6250 FOR RIB=BUF+11 TO BUF+255 STEP 35
6300 FOR I=1 TO LEN(F$)
6350 IF ASC(F$(I))# PEEK (RIB+2+I) THEN 6500
6400 NEXT I
6450 FOR I= LEN(F$)+1 TO 30:IF PEEK (RIB+2+I)#160 THEN 6500:NEXT I:RETURN
6500 NEXT RIB
6550 SECT= PEEK (BUF+2):IF SECT#0 THEN 6150
6600 RIB=0:RETURN
6650 REM
6800 PRINT "HIT ANY KEY TO CONTINUE"
6850 POKE -16368,0
6900 IF PEEK (-16384)<128 THEN 6900: POKE -16368,0:RETURN
6950 REM
7100 POKE XADD+1,X: POKE XADD,X1
7200 RETURN
7250 REM
7450 REM
7500 X1= PEEK (XADD):X= PEEK (XADD+1)
7550 RETURN
7700 DIM Y$(80)
7750 GOSUB 8050:GOSUB 7800:Y$="":GOSUB 8100:GOSUB 7800:RETURN
7800 Y$( LEN(Y$)+1)=" N E88AG"
7850 FOR I=1 TO LEN(Y$)
7900 POKE 511+I, ASC(Y$(I)):NEXT I
7950 POKE 72,0:CALL -144
8000 RETURN
8050 Y$="280:20 E3 03 84 02 85 03 A0 08 B1 02 85 00 C8 B1 02 85 01 60":RETURN
8100 Y$="293:20 E3 03 20 D9 03 B0 06 A0 0D A9 00 91 02 60":RETURN